package com.atguigu.boot;

import com.atguigu.boot.bean.Pet;
import com.atguigu.boot.bean.User;
import com.atguigu.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

//相当于告诉springboot这是一个springboot应用
//把这个用springboot应用的程序作为main主程序
@SpringBootApplication(scanBasePackages = "com.atguigu.boot")//手动指定url扫描范围
public class MainApplication {
    public static void main(String[] args) {//程序一起来就会运行这个文件这个主方法
        //SpringApplication.run(MainApplication.class,args);//默认从controller查url
        ConfigurableApplicationContext run= SpringApplication.run(MainApplication.class,args);
        //1.返回我们ioc容器

        //2.查看容器里面的组件
        String[] names=run.getBeanDefinitionNames();//这是容器中组件的名字们
        for(String name: names){
            System.out.println(name);//在日志中有user01和tom都是bean中定义的配置文件中的内容
        }

        //3.从容器中获取组件
        Pet tom10=run.getBean("tom1", Pet.class);
        Pet tom20=run.getBean("tom1", Pet.class);
        System.out.println(tom10==tom20);//true,表明容器中的组件是一个单实例的组件，不管你调用多少次这个组件，他们的内存地址都一样

        MyConfig bean=run.getBean(MyConfig.class);
        System.out.println(bean);//配置类本身也是一个组件，也可以通过类名获取这个配置组件

        User user=bean.user01();//配置对象bean身上的方法，返回的对象地址相同
        User user1=bean.user01();
        System.out.println(user==user1);//true
    }
}
